001    /***********************************************************************************************
002     *              Tekijä:                 Jukka Salminen
003     *              Opiskelijanumero:       i79947
004     *              Email:                  jukka.salminen@uwasa.fi
005     *              Tekoaika:               23.9.2002
006     *              Kurssi/vuosi:           Ohjelmoinnin jatkokurssi/kevät 2002
007     *              Työn tunnus:            Harjoitustyö: Taulukkoeditori web-sivulle
008     ***********************************************************************************************
009     * DataHandler-luokka
010     *====================
011     * Tämän luokan tehtävät ovat:
012     *
013     * 1. Muodostaa HTTP-yhteyden URL-osoitteeseen, josta XML-stream luetaan.
014     * 2. Muodostaa reader-objektin, joka lukee URL-osoitteesta
015     * 3. Muodostaa XMLData-objektin XML:n parsimista varten
016     * 4. Muodostaa QDParser-objektin ja antaa edellä muodostetut reader- ja
017     *    XMLData-objektit parametreina. Ks. tarkemmin QDParserin dokumentaatio.
018     *
019     * Metodit
020     *--------
021     * get                 Luo XML-datan lukemiseen ja parsimiseen tarvittavat objektit.
022     *                     Käynnistää lukemisen kutsumalla parserin parse-metodia.
023     *
024     * getReader           Muodostaa URLConnection-objektin, hakee sen avulla input-streamin
025     *                     ja muodostaa reader-objektin joka lukee streamista.
026     *
027     * Jäsenmuuttujat
028     *---------------
029     *
030     *  m_url
031     *  -----
032     *  String             URL (tai tiedosto), josta data luetaan
033     *
034     *  m_xmlData
035     *  ---------
036     *  XMLData            XMLDatassa on määritelty takaisinkutsuttavat funktiot,
037     *                     joita kutsutaan parserista
038     *
039     * m_reader
040     * --------
041     * InputStreamReader    Hoitaa merkkien lukemisen URLConnection-streamista
042     *
043     * Paikalliset muuttujat
044     *----------------------
045     *  Dokumentoitu ensimmäisen esittelyn yhetydessä
046     */
047    
048    package jsxml;
049    
050    import jsxml.qdxml.*;
051    
052    import java.io.*;
053    import java.net.*;
054    import java.util.Vector;
055    
056    public class DataHandler
057    {
058            private String m_url;
059            private XMLdata m_xmlData;
060            private InputStreamReader m_reader;
061            public DataHandler(String sURL)
062            {
063                    // Testausta varten voidaan lukea XML tiedostosta
064                    if (sURL.equals("") || sURL.equals(null))
065                    {
066                            m_url = "XMLTable.xml";
067                    }
068                    else
069                    {
070                            m_url = sURL;
071                    }
072                    m_xmlData = new XMLdata();
073            }
074            
075            public Vector get()
076            {
077                    m_reader = getReader();
078                    if (m_reader != null)
079                    {
080                            // Luodaan QDParser-luokasta objekti parser
081                            QDParser parser = new QDParser();
082                            try
083                            {
084                                    // Annetaan parserille XML-datan käsittelijä ja URL-lukija
085                                    parser.parse(m_xmlData, m_reader);
086                                    m_reader.close();
087                                    // Kun homma on valmis, haetaan taulukon datavektori
088                                    return m_xmlData.getDataVector();
089                            }
090                            catch (Exception e4)
091                            {
092                                    System.err.println("Virhe XML-streamin käsittelyssä: "+e4.getMessage());
093                                    return null;
094                            }
095                            
096                    }
097                    return null;
098            }
099            private InputStreamReader getReader()
100            {
101                    try
102                    {
103                            // reader-objekti lukee joko tiedostosta tai http-osoitteesta
104                            InputStreamReader reader;
105                            if (m_url.startsWith("http:"))
106                            {
107                                    URL URL = new URL(m_url);
108                                    URLConnection xmlSite = URL.openConnection();
109                                    InputStream input = xmlSite.getInputStream();
110                                    reader = new InputStreamReader(input);
111                            }
112                            else
113                            {
114                                    FileInputStream fis = new FileInputStream(m_url);
115                                    reader = new InputStreamReader(fis);
116                            }
117                            return reader;
118                    }
119                    catch (MalformedURLException e1)
120                    {
121                            System.err.println("Virhe 1 "+e1.getMessage());
122                            return null;
123                    }
124                    catch (UnknownHostException e2)
125                    {
126                            System.err.println("Virhe 2 "+e2.getMessage());
127                            return null;
128                    }
129                    catch (Exception e3)
130                    {
131                            System.err.println("Virhe 3 "+e3.getMessage());
132                            return null;
133                    }
134            }
135    }